package cn.hennancf.qieqie.utils.http;


import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;

public class Signature {

	private static final String KEY = "qkqr8sm6c4xkcf6u99orjtwwkbcu95bx";

	public static String getSign(Map<String, String> map) {
		ArrayList<String> list = new ArrayList<String>();
		for (Map.Entry<String, String> entry : map.entrySet()) {
			if (!StringUtils.isEmpty(entry.getValue())) {
				list.add(entry.getKey() + "=" + entry.getValue() + "&");
			}
		}
		int size = list.size();
		String[] arrayToSort = list.toArray(new String[size]);
		Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < size; i++) {
			sb.append(arrayToSort[i]);
		}
		String result = sb.toString();
		result += "key=" + KEY;
		System.out.println(result);
		result = MD5.MD5Encode(result).toUpperCase();
		return result;
	}

	/**
	 * 从map数据里面重新计算一次签名
	 * 
	 * @param
	 * @return 新鲜出炉的签名
	 */
	public static String getSignFromResponseString(Map<String, String> map) {
		// 清掉返回数据对象里面的Sign数据（不能把这个数据也加进去进行签名），然后用签名算法进行签名
		map.put("sign", "");
		// 将API返回的数据根据用签名算法进行计算新的签名，用来跟API返回的签名进行比较
		return Signature.getSign(map);
	}

	/**
	 * @Title checkSing
	 * @Description 校验签名
	 * @param
	 * @param sign
	 * @return boolean
	 */
	public static boolean checkSing(Map<String, String> map, String sign) {
		if (StringUtils.isBlank(sign)) {
			return false;
		}
		return sign.equals(getSign(map));
	}
}
